//导入axios
import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from "axios";
import { ElMessage } from 'element-plus'

//1. 创建新的axios实例
const instance = axios.create({
  // 公共接口
  baseURL: "http://localhost:8088",
  // 超时时间 单位是ms，这里设置了10s的超时时间
  timeout: 10000,
});

//2. 配置请求头，全局的 axios 默认值
instance.defaults.headers.post["Content-Type"] = "application/json;charset=UTF-8"; // 流程组件 content-type
instance.defaults.headers.patch["Content-Type"] = "application/json;charset=UTF-8"; // 流程组件 content-type

//3.添加一个请求拦截器
instance.interceptors.request.use(
  (config: AxiosRequestConfig) => {
    //设置loading
    // ElMessage({
    //   message: "加载中...",
    //   duration: 0, //一直存在
    // });
    //数据转换,判断数据格式为formdata还是json格式
    //json格式
    config.data = JSON.stringify(config.data);
    return config;
  },
  (error:any) => {
    //出现请求错误，清除toast
    ElMessage({
      message: "请求错误，请稍后重试...",
      showClose: true,
    });
    return Promise.reject(error);
  }
);

//4. 添加一个响应拦截器
instance.interceptors.response.use(
  (response: AxiosResponse) => {
    const { status, data } = response;
    if (status == 200) {
      // 接口网络请求成功，关闭等待提示
      if (data.code == 200) {
        //接口请求结果正确
        // console.log(data)
        return data;
      } else {
        return Promise.reject(data);
      }
    }
  },
  (error: AxiosError) => {
    //响应失败，关闭等待提示
    ElMessage({
      showClose: true,
    });
    // 超时处理
    if (JSON.stringify(error).includes("Network Error")) {
      ElMessage("网络超时");
    } else {
      ElMessage("服务器连接失败");
    }
    console.info(error);
    return Promise.reject(error);
  }
);

//5. 导出文件
export default instance;
